All files / app/pages [...slug].tsx

0% Statements 0/19
0% Branches 0/2
0% Functions 0/5
0% Lines 0/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53                                                                                                         
import { appGetLayout } from "components/AppRoute";
import MarkdownPage, {
  MarkdownPageProps,
} from "features/markdown/MarkdownPage";
import { AUTH, GLOBAL, NOTIFICATIONS } from "i18n/namespaces";
import { GetStaticPaths, GetStaticProps } from "next";
import nextI18nextConfig from "next-i18next.config";
import { serverSideTranslations } from "next-i18next/serverSideTranslations";
 
async function getMarkdownPageBySlug(
  slug: Array<string>,
): Promise<MarkdownPageProps> {
  const md = await import(`markdown/${slug.join("/")}.md`);
  return { slug, frontmatter: md.attributes, content: md.html };
}
 
export const getStaticPaths: GetStaticPaths = () => {
  // Return empty paths for fast builds
  // Pages will be generated on-demand with fallback: 'blocking'
  return {
    paths: [],
    fallback: "blocking",
  };
};
 
export const getStaticProps: GetStaticProps = async ({ locale, params }) => {
  const slug = params!.slug as Array<string>;
 
  try {
    return {
      props: {
        ...(await serverSideTranslations(
          locale ?? "en",
          [GLOBAL, AUTH, NOTIFICATIONS],
          nextI18nextConfig,
        )),
        page: await getMarkdownPageBySlug(slug),
      },
    };
  } catch {
    // Markdown file doesn't exist or path is invalid
    return { notFound: true };
  }
};
 
export default function Markdown({ page }: { page: MarkdownPageProps }) {
  return <MarkdownPage {...page} />;
}
 
Markdown.getLayout = appGetLayout({
  isPrivate: false,
});